// 独立集
// https://www.luogu.com.cn/problem/P1352

int n;
int a[maxn];
vector<int> adj[maxn];
int f[maxn][2];
// f[now][1] = sum(f[sub][0] + a[now])
// f[now][0] = sum(max(f[sub][0], f[sub][1]))

void dfs(int now) {
    for (auto &p : adj[now])
        dfs(p);
    f[now][1] += a[now];
    for (auto &p : adj[now])
        f[now][1] += f[p][0], f[now][0] += max(f[p][1], f[p][0]);
}
